const User = require('../models/User.js');

/**
 *  @desc 获取用户列表
 */
exports.getUsers = (req, res) => {
  // 获取用户提交的邮箱地址
  const email = req.query.email;
  const username = req.query.username;

  // 获取用户提交的页码和每页的数量
  const page = Math.max(1, req.query.page || 1);
  const size = Math.min(100, req.query.size || 10);

  // 获取用户提交的排序字段和排序方式
  const sortField = req.query.sortField || 'createdAt';
  const sortOrder = req.query.sortOrder || 'asc';

  // 构造查询条件
  const query = {};
  if (email) {
    query.email = {$regex: new RegExp(email, 'i')};
  }

  if (username) {
    query.username = {$regex: new RegExp(username, 'i')};
  }

  // 计算分页的参数
  const skip = (page - 1) * size;
  const limit = size;

  User.find(query)
    .sort({[sortField]: sortOrder})
    .skip(skip)
    .limit(limit)
    .lean()
    .then((users) => {
      // 计算用户总数
      User.countDocuments(query, (err, count) => {
        if (err) {
          res.status(500).json({message: err.message});
        } else {
          res.json({
            total: count,
            page: page,
            size: users.length,
            users: users
          });
        }
      });
    })
    .catch((err) => {
      res.status(500).json({message: err.message});
    });
};

/**
 *  @desc 通过id获取用户信息
 */
exports.getUserById = (req, res, next) => {
  // 获取当前登录用户的用户 ID
  const currentUserId = req.user.id;

  // 获取要删除的用户 ID
  const userId = req.params.userId;

  // 验证用户权限
  if (currentUserId !== userId) {
    return res.status(401).json({message: 'Unauthorized.'});
  }

  User.findById(req.params.userId, (err, user) => {
    if (err) {
      return res.status(500).json({message: err.message});
    }
    if (!user) {
      return res.status(404).json({message: 'User not found'});
    }
    res.json(user);
  });
};
/**
 *  @desc 通过id删除用户
 */
exports.deleteUser = (req, res) => {
  // 获取当前登录用户的用户 ID
  const currentUserId = req.user.id;

  // 获取要删除的用户 ID
  const userId = req.params.userId;

  // 验证用户权限
  if (currentUserId !== userId) {
    return res.status(401).json({message: 'Unauthorized.'});
  }

  // 根据用户 ID 删除用户
  User.remove({_id: userId}, (err) => {
    if (err) {
      console.error(err);
      return res.status(500).json({message: err.message});
    }

    res.json({message: 'User deleted successfully.'});
  });
};

/**
 *  @desc 批量删除用户
 */
exports.deleteUsers = (req, res) => {
  // 获取要删除的用户 ID 列表
  const userIds = req.body.userIds;

  if (!userIds || userIds.length === 0) {
    return res.status(400).json({message: 'No user IDs provided.'});
  }

  // 根据用户 ID 列表批量删除用户
  User.remove({_id: {$in: userIds}}, (err) => {
    if (err) {
      console.error(err);
      return res.status(500).json({message: err.message});
    }

    res.json({message: 'Users deleted successfully.'});
  });
};

/**
 *  @desc 通过id更新用户
 */
exports.updateUser = (req, res) => {
  // 获取当前登录用户的用户 ID
  const currentUserId = req.user.id;

  // 获取要更新的用户 ID
  const userId = req.params.userId;

  // 验证用户权限
  if (currentUserId !== userId) {
    return res.status(401).json({message: 'Unauthorized.'});
  }

  // 获取用户提交的更新信息
  const updatedUser = req.body;

  // 不允许用户自己更改角色、邮箱
  delete updatedUser.email;
  delete updatedUser.role;

  // 根据用户 ID 更新用户信息
  User.findByIdAndUpdate(userId, updatedUser, {new: true, runValidators: true}, (err, user) => {
    if (err) {
      return res.status(500).json({message: err.message});
    }

    res.json(user);
  });
};
